package com.uam.web.controller;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.uam.web.common.model.SysLayerConfig;
import com.uam.common.exception.UamException;
import com.uam.common.file.FileToStringUtils;
import com.uam.db.model.entity.User;
import com.uam.web.common.utils.WebUtil;
import com.uam.web.common.model.PageData;
import com.uam.web.common.model.Result;
import com.uam.web.common.utils.ServletUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * web层通用数据处理
 *
 * @author uam
 */
@Slf4j
public class BaseController {

    /**
     * 获取request
     */
    public HttpServletRequest getRequest() {
        return ServletUtils.getRequest();
    }

    /**
     * 获取response
     */
    public HttpServletResponse getResponse() {
        return ServletUtils.getResponse();
    }

    /**
     * 获取session
     */
    public HttpSession getSession() {
        return getRequest().getSession();
    }

    /**
     * 响应请求分页数据
     */
    protected <T> Result<PageData<T>> okPageData(IPage<T> pageResult) {
        PageData<T> pageData = new PageData(pageResult.getRecords(), pageResult.getTotal());
        return Result.ok(pageData);
    }

    /**
     * 响应返回结果
     *
     * @param rows 影响行数
     * @return 操作结果
     */
    protected Result toResult(int rows) {
        return rows > 0 ? Result.ok() : Result.fail();
    }

    /**
     * 获取用户缓存信息
     */
    public User getSysUser() {
        return WebUtil.getTokenUser();
    }

    /**
     * 获取登录用户id
     */
    public Long getUserId() {
        return getSysUser().getUserId();
    }

    /**
     * 获取登录用户名
     */
    public String getLoginName() {
        return getSysUser().getLoginName();
    }

    /**
     * 读取系统图层配置数据
     */
    public SysLayerConfig getSysLayerConfig(String sysLayerPath) {
        if (StringUtils.isBlank(sysLayerPath)) {
            throw UamException.fileTypeError("文件地址不能为空!");
        }
        log.info("读取系统图层配置数据:{}", sysLayerPath);
        String data = FileToStringUtils.txt2String(sysLayerPath);
        SysLayerConfig config = JSONObject.parseObject(data, SysLayerConfig.class);
        if (config == null) {
            throw UamException.fileTypeError("文件数据内容有误!");
        }
        return config;
    }
}
